package pl.register.android.database;

import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.util.Log;
import pl.register.android.database.tables.*;
import pl.register.android.storage.external.CourseRegisterSDCardManager;
import pl.register.android.util.database.DatabaseUtil;

import java.util.Locale;

/**
 * @author Mateusz Strzelecki
 * @since 2013-05-05
 */
public class SDCardDatabaseHelper {
    private static final String TAG = SDCardDatabaseHelper.class.getSimpleName();

    public static final String DATABASE_NAME = "course_register.db";

    public static final String DB_PATH = CourseRegisterSDCardManager.DATABASE_PATH + DATABASE_NAME;


    public void createDB(){
        SQLiteDatabase database = null;
        try {
            database = SQLiteDatabase.openDatabase(
                    DB_PATH,
                    null,
                    SQLiteDatabase.CREATE_IF_NECESSARY
            );
            createTables();
        } catch (SQLiteException ex) {
            Log.e(TAG, "error -- " + ex.getMessage(), ex);
        } finally {
            DatabaseUtil.closeDataBase(database);
        }
    }

    private void createTables() {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL(CourseDBTable.Query.CREATE_TABLE);
        db.execSQL(YearDBTable.Query.CREATE_TABLE);

        db.execSQL(LessonProgramDBTable.Query.CREATE_TABLE);
        db.execSQL(ClassesTopicDBTable.Query.CREATE_TABLE);
        db.execSQL(HomeworkTopicDBTable.Query.CREATE_TABLE);
        db.execSQL(ChapterTitleDBTable.Query.CREATE_TABLE);

        db.execSQL(StudentDBTable.Query.CREATE_TABLE);
        db.execSQL(StudentClassNumberDBTable.Query.CREATE_TABLE);
        db.execSQL(StudentInYearDBTable.Query.CREATE_TABLE);

        db.execSQL(StudentGroupDBTable.Query.CREATE_TABLE);
        db.execSQL(ProgramInGroupDBTable.Query.CREATE_TABLE);
        db.execSQL(StudentInGroupsDBTable.Query.CREATE_TABLE);

        db.execSQL(LessonDBTable.Query.CREATE_TABLE);
        db.execSQL(ClassesDBTable.Query.CREATE_TABLE);
        db.execSQL(HomeworkDBTable.Query.CREATE_TABLE);
        db.execSQL(TaskDBTable.Query.CREATE_TABLE);

        // ustawienia lokalne.
        db.setLocale(Locale.getDefault());
        // Przystosowanie SQLiteDatabase do pracy wielowątkowej
        // poprzez zastosowanie blokad w kluczowych sekcjach.
        db.setLockingEnabled(true);
        DatabaseUtil.closeDataBase(db);
    }

    public SQLiteDatabase getReadableDatabase() {
        return SQLiteDatabase.openDatabase(
                DB_PATH,
                null,
                SQLiteDatabase.OPEN_READONLY);
    }

    public SQLiteDatabase getWritableDatabase() {
        return SQLiteDatabase.openDatabase(
                DB_PATH,
                null,
                SQLiteDatabase.OPEN_READWRITE);
    }
}